2016-06-21 48 views
0

我有以下代碼,我正在努力將解析的數據中的唯一標識的值從json傳遞到DetailActivity.java。我想使用Mainactivity.java中的unique_id值DetailActivity.java作爲URL的參數。我是一個新手,所以請幫助我解決這個問題。 我把孔Mainactivity.javaDetailActivty.java如何將unique_id的值傳遞給另一個要在ListView中使用的活動

public class MainActivity extends AppCompatActivity { 

    private TextView text1; 
    private ListView lisView; 
    private ProgressDialog dialog; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     // Create default options which will be used for every 
     // displayImage(...) call if no options will be passed to this method 
     DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder() 
     .cacheInMemory(true) 
     .cacheOnDisk(true) 
     .build(); 
     ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext()) 

     .defaultDisplayImageOptions(defaultOptions).build(); 
     ImageLoader.getInstance().init(config); // Do it on Application start 


     lisView = (ListView) findViewById(R.id.lvnews); 
     new JSONTask().execute("http://cricapi.com/api/cricket"); 
     Button button = (Button)findViewById(R.id.btn); 

     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       new JSONTask().execute("http://cricapi.com/api/cricket"); 
      } 
     }); 

    } 


    public class JSONTask extends AsyncTask<String, String, List<NewsModel>> { 



     @Override 
     protected List<NewsModel> doInBackground(String... params) { 
      HttpURLConnection connection = null; 
      BufferedReader reader = null; 
      try { 
       URL url = new URL(params[0]); 
       connection = (HttpURLConnection) url.openConnection(); 
       connection.connect(); 

       InputStream stream = connection.getInputStream(); 

       reader = new BufferedReader(new InputStreamReader(stream)); 
       StringBuffer buffer = new StringBuffer(); 
       String line = ""; 
       while ((line = reader.readLine()) != null) { 
        buffer.append(line); 
       } 
       String finalJson = buffer.toString(); 

       JSONObject parentObject = new JSONObject(finalJson); 
       JSONArray parentArray = parentObject.getJSONArray("data"); 

       List<NewsModel> newsModelList = new ArrayList<>(); 

       for (int i = 0; i < parentArray.length(); i++) { 
        JSONObject finalObject = parentArray.getJSONObject(i); 
        NewsModel newsModel = new NewsModel(); 
        newsModel.setHeadline(finalObject.getString("unique_id")); 
        newsModel.setAuthor(finalObject.getString("description")); //   newsModel.setImage(finalObject.getString("Image")); 
        newsModel.setDescription(finalObject.getString("title")); 

        newsModelList.add(newsModel); 
       } 
       return newsModelList; 

      } catch (MalformedURLException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } finally { 
       if (connection != null) { 
        connection.disconnect(); 
       } 
       try { 
        if (reader != null) { 
         reader.close(); 
        } 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 


      return null; 
     } 

     @Override 
     protected void onPostExecute(final List<NewsModel> result) { 
      super.onPostExecute(result); 
      if(result != null) { 
       final NewsAdapter newsAdapter = new NewsAdapter(getApplicationContext(), R.layout.row, result); 
       lisView.setAdapter(newsAdapter); 
       lisView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
        @Override 
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
         Intent intent = new Intent(MainActivity.this, DetailActivity.class); 
         startActivity(intent); 

        } 
       }); 
      } 
     } 
    } 

    public class NewsAdapter extends ArrayAdapter{ 

     public List<NewsModel> newsModelList; 
     private int resource; 
     private LayoutInflater inflater; 
     public NewsAdapter(Context context, int resource, List<NewsModel> objects) { 
      super(context, resource, objects); 
      newsModelList = objects; 
      this.resource = resource; 
      inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE); 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      ViewHolder holder = null; 
      if(convertView == null){ 
       holder = new ViewHolder(); 
       convertView = inflater.inflate(R.layout.row, null); 
       holder.headline = (TextView)convertView.findViewById(R.id.headlineview); 
       holder.author = (TextView)convertView.findViewById(R.id.authorview); 
       //holder.image = (ImageView)convertView.findViewById(R.id.imageView); 
       holder.description = (TextView)convertView.findViewById(R.id.descriptionview); 

       convertView.setTag(holder); 
      }else{ 
       holder = (ViewHolder) convertView.getTag(); 
      } 
       //holder.headline.setText(newsModelList.get(position).getHeadline()); 
       holder.author.setText(newsModelList.get(position).getAuthor()); 
       holder.description.setText(newsModelList.get(position).getDescription()); 



      return convertView; 
     } 

     private class ViewHolder { //   private ImageView image; 
      private TextView headline; 
      private TextView author; 
      private TextView description; 
     } 
    } 


} 

我們的DetailActivity中,我想用UNIQUE_ID作爲參數傳遞給URL提前

public class DetailActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_detail); 
     // here I want to access that unique_id and pass it as id to url 
     //Example http://cricapi.com/api/cricketScore?unique_id=946765 
    } 
} 

感謝

回答

0

您可以使用無論是直接捆綁(或),您都可以通過意向本身發送它。以下是主要活動類的代碼

lisView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
          @Override 
          public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
           Intent intent = new Intent(MainActivity.this, DetailActivity.class); 
           //Passing the values to another activty using a unique key.. 
           intent.putExtra("unique_id", newsModelList.get(position).getHeadline()); 
           startActivity(intent); 

          } 
        }); 

現在詳細介紹活動通過相同的唯一鍵獲取值。

Bundle bundle = getIntent().getExtras(); 
     if (bundle != null) { 
      String text = bundle.getString("unique_id"); 
     } 

希望這會對您有所幫助。

+0

感謝您的代碼。 onItemClick存在問題。 newsModelList不可訪問。它說不能解決符號'新聞模式列表'。 – Muhammad

+0

@Muhammad ::如果您在onPostExecute()方法中使用,則應該使用您獲得的結果作爲參數(OR),您應該公開聲明newsModelList arraylist以供訪問。 – Jeevanandhan

+0

謝謝這麼多...像一個魅力工作 – Muhammad

0

MainActivity,你可以在意向像下面

Intent intent = new Intent(MainActivity.this, DetailActivity.class); 
intent.putString("unique_id", value); startActivity(intent); 

增加值在DetailActivity,您可以在onCreate方法獲取相同的值,這樣

getIntent().getString("unique_id"); 
+0

謝謝,但我想了解一些細節... – Muhammad

相關問題