2015-12-05 51 views
0

我已經解析了JSON解析收到的數據。現在我想使用arrayadapter在列表視圖中顯示解析的數據。但crashes.When我刪除JP類即parseJSON和的getJSON的fuctions片段中的活動應用程序的應用程序運行,但沒有出現在列表中view.pls幫助 代碼: JP.class使用arrayadapter在分片中的列表視圖中顯示分析的數據

package secondslash.secondslash; 

import android.app.Activity; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.os.AsyncTask; 
import android.util.Base64; 
import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 
import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.net.HttpURLConnection; 
import java.net.MalformedURLException; 
import java.net.URL; 


/** 
* Created by alokit nigam on 12/5/2015. 
*/ 
public class JP extends Activity { 

    String JSON_STRING,json_string; 
    public Bitmap bmp; 

    CustomListViewAdapter customListViewAdapter; 
    public void getJSON(){ 
     new BackgroundTask1().execute(); 
    } 
    public void parseJSON(){ 
     try { 
      JSONObject jsonObject=new JSONObject(json_string); 
      JSONArray jsonArray=jsonObject.getJSONArray("server_response"); 
      int count=0; 
      String articleId,topicId,headline,article,image; 

      while(count<jsonArray.length()){ 

       JSONObject JO=jsonArray.getJSONObject(count); 
       articleId=JO.getString("article_id"); 
       topicId=JO.getString("topic_id"); 
       headline=JO.getString("headline"); 
       article=JO.getString("article"); 
       image=JO.getString("image"); 
       byte[] qrimage = Base64.decode(image.getBytes(), count); 
       bmp = BitmapFactory.decodeByteArray(qrimage, 0, qrimage.length); 
       newsDetails nd=new newsDetails(articleId,topicId,headline,article,bmp); 
       customListViewAdapter.add(nd); 
       count++; 

      } 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } 



    class BackgroundTask1 extends AsyncTask<Void,Void,String> 
    { 
     String json_url; 
     @Override 
     protected void onPreExecute() { 
      json_url="http://secondslash.site88.net/json_get_data.php"; 

     } 

     @Override 
     protected String doInBackground(Void... params) { 

      try { 
       URL url=new URL(json_url); 
       HttpURLConnection httpURLConnection=(HttpURLConnection)url.openConnection(); 
       InputStream inputStream=httpURLConnection.getInputStream(); 
       BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(inputStream)); 
       StringBuilder stringBuilder=new StringBuilder(); 
       while ((JSON_STRING=bufferedReader.readLine())!=null){ 
        stringBuilder.append(JSON_STRING+"\n"); 
       } 
       bufferedReader.close(); 
       inputStream.close(); 
       httpURLConnection.disconnect(); 

       return stringBuilder.toString().trim(); 
      } catch (MalformedURLException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 

      return null; 
     } 

     @Override 
     protected void onProgressUpdate(Void... values) { 
      super.onProgressUpdate(values); 
     } 

     @Override 
     protected void onPostExecute(String result) { 

      json_string=result; 
     } 
    } 



} 

CustomAdapter。 java的

package secondslash.secondslash; 

import android.app.Activity; 
import android.content.Context; 
import android.graphics.Bitmap; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.ImageView; 
import android.widget.TextView; 

import java.util.ArrayList; 
import java.util.List; 

import secondslash.secondslash.mainActivity.topnewsFragment; 

public class CustomListViewAdapter extends ArrayAdapter { 

    List list=new ArrayList(); 

    public CustomListViewAdapter(Context context, int resource) { 
     super(context, resource); 
    } 


    public void add(newsDetails object) { 
     super.add(object); 
     list.add(object); 
    } 

    @Override 
    public int getCount() { 
     return list.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return list.get(position); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     View row; 
     row=convertView; 
     ContactHolder contactHolder; 
     if(row==null){ 
      LayoutInflater layoutInflater=(LayoutInflater)this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      row=layoutInflater.inflate(R.layout.list_news,parent,false); 
      contactHolder=new ContactHolder(); 
      contactHolder.title=(TextView)row.findViewById(R.id.title); 
      contactHolder.desc=(TextView)row.findViewById(R.id.desc); 
      contactHolder.icon=(ImageView)row.findViewById(R.id.icon); 
      row.setTag(contactHolder); 
     } 
     else { 
      contactHolder=(ContactHolder)row.getTag(); 
     } 

     newsDetails contacts=(newsDetails)this.getItem(position); 
     contactHolder.title.setText(contacts.getheadline()); 
     contactHolder.desc.setText(contacts.gettopicId()); 
     contactHolder.icon.setImageBitmap(contacts.getImage()); 

     return row; 
    } 

    static class ContactHolder{ 
     TextView title,desc; 
     ImageView icon; 
    } 
} 

newsDetails.java

package secondslash.secondslash; 

import android.graphics.Bitmap; 
import android.media.Image; 
import android.widget.ImageView; 

/** 
* Created by alokit nigam on 12/3/2015. 
*/ 
public class newsDetails { 
    private String articleId,topic_id,headline,article; 
    Bitmap image; 



     public newsDetails(String articleId,String topic_id,String headline,String article,Bitmap image){ 
      this.setarticleId(articleId); 
      this.settopicId(topic_id); 
      this.setheadline(headline); 
      this.setArticle(article); 
      this.setImage(image); 
     } 

     public String getarticleId() { 
      return articleId; 
     } 

     public void setarticleId(String articleId) { 
      this.articleId = articleId; 
     } 

     public String gettopicId() { 
      return topic_id; 
     } 

     public void settopicId(String topic_id) { 
      this.topic_id = topic_id; 
     } 

     public String getheadline() { 
      return headline; 
     } 

     public void setheadline(String headline) { 
      this.headline = headline; 
     } 
    public String getArticle() { 
     return article; 
    } 

    public void setArticle(String article) { 
     this.article = article; 
    } 
    public Bitmap getImage(){ 
     return image; 
    } 
    public void setImage(Bitmap image){ 
     this.image=image; 
    } 
    } 

topnews.java

package secondslash.secondslash.mainActivity; 

import android.content.Intent; 
import android.os.Bundle; 
import android.support.annotation.Nullable; 
import android.support.v4.app.Fragment; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.ListView; 
import android.widget.Toast; 

import java.util.ArrayList; 
import java.util.List; 

import secondslash.secondslash.Adapter; 
import secondslash.secondslash.CustomListViewAdapter; 
import secondslash.secondslash.JP; 
import secondslash.secondslash.R; 
import secondslash.secondslash.RowItem; 
import secondslash.secondslash.feedsActivity; 

/** 
* Created by alokit nigam on 7/29/2015. 
*/ 
public class topnewsFragment extends Fragment { 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.topnews_layout, null); 


     ListView list = (ListView) view.findViewById(R.id.list); 
     CustomListViewAdapter cus = new CustomListViewAdapter(getContext(), R.layout.list_news); 
     list.setAdapter(cus); 
     JP jp = new JP(); 
     jp.getJSON(); 
     jp.parseJSON(); 


     list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> arg0, View arg1, int pos, 
            long arg3) { 
       // TODO Auto-generated method stub 
       Toast.makeText(getContext(), "You clicked on position : " + pos + " and id : " + arg3, Toast.LENGTH_LONG).show(); 

       Intent myIntent = new Intent(getContext(), feedsActivity.class); 
       startActivity(myIntent); 
      } 

     }); 

     return view; 

    } 
} 

回答

0

解析必須在AsyncTask post執行完成。 AsyncTask(獲取JSON數據)在後臺線程中完成。同時,你的主線程繼續到你的getJson方法,你期望son_string對象已經從你的JSON請求中收到了所有的信息,但這可能還沒有完成

+0

,我應該怎麼做才能使它發生..請幫助 –

+0

或者在postExecute方法中執行JSON解析,或者創建一個執行解析的獨立方法,並從postExecute中調用該方法 – CRichardson3

相關問題