0

サーバーからのデータListViewasyncTask. 接続は正常に機能しますが、 にデータを入れようとすると、 にJsonParserエラーが発生します。OnPostExecute()ListView

したがって、これは を呼び出すクラスですasynctask

public class GetInfo extends Activity{ 

    ListView listeView;

    protected void onCreate(Bundle bundle)
    {
        super.onCreate(bundle);    
        setContentView(R.layout.listdata);   
        listeView = (ListView) findViewById(R.id.maListeView);     

        GetJson getJson = new GetJson(GetInfo.this);
        getJson.execute();           
    }
}

ここでは問題はありません。これは私のクラスAsyncTaskです:

class GetJson extends AsyncTask<Void, Integer,  ArrayList<String>> {

    private Context Mycontext;
    private ListView listview; 
    private ArrayAdapter<String> arrayadapter;
    private ProgressDialog pDialog;
    private ArrayList<String> donnees;
    private ListActivity listAct;

    public GetJson(GetInfo getInfo) {
        Mycontext = getInfo;
    }

    @Override
    protected void onPreExecute() {
        // Showing progress dialog before sending http request
        this.pDialog  = new ProgressDialog(Mycontext);
        this.pDialog.setMessage("Please wait..");
        this.pDialog.setIndeterminate(true);
        this.pDialog.setCancelable(false);
        this.pDialog.show();    
    }

    @Override
    protected  ArrayList<String> doInBackground(Void... arg0) {          
        String result = null;
        InputStream is = null;
        JSONObject json_data=null;
        ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
        this.donnees = new ArrayList<String>();

        try{
            //commmand http
            HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost("http://192.168.0.100/timesync.php");
            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            HttpResponse response = httpclient.execute(httppost);
            HttpEntity entity = response.getEntity();
            is = entity.getContent();
        }
        catch(Exception e){
            Log.i("taghttppost",""+e.toString());           
        }

        //parse response
        try
        {
            BufferedReader reader = new BufferedReader(new InputStreamReader(is,"UTF-8"));         
            StringBuilder sb  = new StringBuilder();           
            String line = null;            
            while ((line = reader.readLine()) != null)
            {
                sb.append(line + "\n");
            }

            is.close();

            result = sb.toString();
        }
        catch(Exception e)
        {
            Log.i("tagconvertstr",""+e.toString());
        }        

        //get json data
        try{
            JSONArray jArray = new JSONArray(result);             
            for(int i=0;i<jArray.length();i++)
            {             
                json_data = jArray.getJSONObject(i);
                this.donnees.add("date :"+ json_data.getString("time") + " ou " +
                    json_data.getString("date") + json_data.getString("hour"));     
            }
        }
        catch(JSONException e){
            Log.i("tagjsonexp",""+e.toString());
        } catch (ParseException e) {
            Log.i("tagjsonpars",""+e.toString());
        }
        return this.donnees;
    }

    @Override
    protected void onPostExecute(ArrayList<String> donnees) {    
        super.onPostExecute(donnees);

        this.pDialog.dismiss();

        for(int i=0;i<donnees.size();i++)
        {             
            Log.i("time", donnees.get(i));
        } 

        // this.arrayadapter = new ArrayAdapter<String>(Mycontext, android.R.layout.simple_list_item_1, this.donnees);
        // this.listview.setAdapter(this.arrayadapter);
    }
}

私の問題はコメント行です:

// this.arrayadapter = new ArrayAdapter<String>(Mycontext, android.R.layout.simple_list_item_1, this.donnees);
// this.listview.setAdapter(this.arrayadapter);

理由がわかりません...

これは私のエラーです:

11-05 16:43:36.560: E/AndroidRuntime(11200): FATAL EXCEPTION: main
11-05 16:43:36.560: E/AndroidRuntime(11200): java.lang.NullPointerException
11-05 16:43:36.560: E/AndroidRuntime(11200):at com.json.GetJson.onPostExecute(Adapter.java:134)
11-05 16:43:36.560: E/AndroidRuntime(11200):at android.os.AsyncTask.finish(AsyncTask.java:631)
11-05 16:43:36.560: E/AndroidRuntime(11200):at android.os.AsyncTask.access$600(AsyncTask.java:177)
11-05 16:43:36.560: E/AndroidRuntime(11200):at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)

.
.
.

結果がログに記録されているので、コードが に渡されていることは間違いありませんOnPostExecute()

4

5 に答える 5

0

PostExecute Menthod で UI 操作を処理している場合は、次の条件で試してください。

Handler refresh = new Handler(Looper.getMainLooper());
        refresh.post(new Runnable() {
            public void run( ){
                             // try UI here .
                            });
于 2013-11-06T08:48:12.990 に答える
0

クラスprivate ListView listview;から行行を削除します。GetJson問題は、listviewオブジェクトではなくクラスのオブジェクトGetJson(初期化されていない)にアクセスしているActivity's listviewことです。

GetInfo Activityこのように直接のリストビューにアクセスします

listview.setAdapter(this.arrayadapter);
于 2013-11-06T08:34:45.543 に答える