java.lang.NullPointerException onPostExecute

时间:2018-11-27 23:40:11

标签: android

大家好,我尝试运行newsApp,它在Lollipop 5.0及更高版本中运行正常,并在api 19中崩溃 注意:如果由于multidex导致崩溃,我将尝试从启用multidex ....到创建扩展Application..etc的类的所有方法,我想知道下面此日志的问题

 Process: com.example.waleed.newsapp, PID: 19021
java.lang.NullPointerException
    at com.example.waleed.newsapp.MainActivity$DownloadNews.onPostExecute(MainActivity.java:79)
    at com.example.waleed.newsapp.MainActivity$DownloadNews.onPostExecute(MainActivity.java:63)
    at android.os.AsyncTask.finish(AsyncTask.java:632)
    at android.os.AsyncTask.access$600(AsyncTask.java:177)
    at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:136)
    at android.app.ActivityThread.main(ActivityThread.java:5476)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
    at dalvik.system.NativeStart.main(Native Method)

应用程序终止。

onPostExecute或类DownloadNews中有问题吗?

这堂课

public class MainActivity extends AppCompatActivity {

String API_KEY = "850e0efe6adf4eb38afefad33e4"; // ### YOUE NEWS API HERE ###
String NEWS_SOURCE = "bbc-news";
ListView listNews;
ProgressBar loader;

ArrayList<HashMap<String, String>> dataList = new ArrayList<HashMap<String, String>>();
static final String KEY_AUTHOR = "author";
static final String KEY_TITLE = "title";
static final String KEY_DESCRIPTION = "description";
static final String KEY_URL = "url";
static final String KEY_URLTOIMAGE = "urlToImage";
static final String KEY_PUBLISHEDAT = "publishedAt";
@Override

protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    MultiDex.install(this);
}
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    listNews = (ListView) findViewById(R.id.listNews);
    loader = (ProgressBar) findViewById(R.id.loader);
    listNews.setEmptyView(loader);



    if(Function.isNetworkAvailable(getApplicationContext()))
    {
        DownloadNews newsTask = new DownloadNews();
        newsTask.execute();
    }else{
        Toast.makeText(getApplicationContext(), "No Internet Connection", Toast.LENGTH_LONG).show();
    }

}


class DownloadNews extends AsyncTask<String, Void, String> {
    @Override
    protected void onPreExecute() {
        super.onPreExecute();

    }
    protected String doInBackground(String... args) {
        String xml ;

        String urlParameters = "";
        xml = Function.excuteGet("https://newsapi.org/v1/articles?source="+NEWS_SOURCE+"&sortBy=top&apiKey="+API_KEY, urlParameters);
        return  xml;
    }
    @Override
    protected void onPostExecute(String xml) {

        if(xml.length()>10){ // Just checking if not empty

            try {
                JSONObject jsonResponse = new JSONObject(xml);
                JSONArray jsonArray = jsonResponse.optJSONArray("articles");

                for (int i = 0; i < jsonArray.length(); i++) {
                    JSONObject jsonObject = jsonArray.getJSONObject(i);
                    HashMap<String, String> map = new HashMap<String, String>();
                    map.put(KEY_AUTHOR, jsonObject.optString(KEY_AUTHOR).toString());
                    map.put(KEY_TITLE, jsonObject.optString(KEY_TITLE).toString());
                    map.put(KEY_DESCRIPTION, jsonObject.optString(KEY_DESCRIPTION).toString());
                    map.put(KEY_URL, jsonObject.optString(KEY_URL).toString());
                    map.put(KEY_URLTOIMAGE, jsonObject.optString(KEY_URLTOIMAGE).toString());
                    map.put(KEY_PUBLISHEDAT, jsonObject.optString(KEY_PUBLISHEDAT).toString());
                    dataList.add(map);
                }
            } catch (JSONException e) {
                Toast.makeText(getApplicationContext(), "Unexpected error", Toast.LENGTH_SHORT).show();
            }

            ListNewsAdapter adapter = new ListNewsAdapter(MainActivity.this, dataList);
            listNews.setAdapter(adapter);

            listNews.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                public void onItemClick(AdapterView<?> parent, View view,
                                        int position, long id) {
                    Intent i = new Intent(MainActivity.this, DetailsActivity.class);
                    i.putExtra("url", dataList.get(+position).get(KEY_URL));
                    startActivity(i);
                }
            });

        }else{
            Toast.makeText(getApplicationContext(), "No news found", Toast.LENGTH_SHORT).show();
        }
    }



}



}

0 个答案:

没有答案