2012-03-11 57 views
0

嗨有一个活动,加载Twitter的饲料。
Android Twitter String to Json ArrayAndroid刷新按钮的最佳做法?

我想要在点击重新加载数据时在顶部放置一个刷新按钮。

到目前为止我已经知道它只是重新加载活动是这样做的最好方式?

package co.uk.fantasticmedia.TheEvoStikLeague; 


import java.io.BufferedReader; 
import java.io.InputStreamReader; 
import java.util.ArrayList; 
import java.util.List; 

import org.apache.http.HttpResponse; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.json.JSONArray; 
import org.json.JSONObject; 

import android.content.Intent; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Menu; 
import android.view.MenuInflater; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.ListView; 
import android.widget.TextView; 
import android.widget.Toast; 
import android.widget.AdapterView.OnItemClickListener; 



import android.app.ListActivity; 



public class TwitterActivity extends ListActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 

    setContentView(R.layout.twitteract); 


    Button refresh = (Button) findViewById(R.id.btn_refresh); 

    //Listening to button event 
    refresh.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View arg0) { 
      //Starting a new Intent 
      Intent reload = new Intent(getApplicationContext(), TwitterActivity.class); 



      startActivity(reload); 


     } 
    }); 





    try{ 
      // Create a new HTTP Client 
      DefaultHttpClient defaultClient = new DefaultHttpClient(); 
      // Setup the get request 
      HttpGet httpGetRequest = new HttpGet("https://api.twitter.com/1/statuses/user_timeline.json?screen_name=evostikleague&count=10"); 

      // Execute the request in the client 
      HttpResponse httpResponse = defaultClient.execute(httpGetRequest); 
      // Grab the response 
      BufferedReader reader = new BufferedReader(new InputStreamReader(httpResponse.getEntity().getContent(), "UTF-8")); 
      String json = reader.readLine(); 

      Log.v(json,"jsonfeed"); 




      List<String> items = new ArrayList<String>(); 

       //items.add(json); 


      JSONArray jArray = new JSONArray(json); 


      for (int i=0; i < jArray.length(); i++) 
      { JSONObject oneObject = jArray.getJSONObject(i); 
       items.add(oneObject.getString("text")); 
       Log.i("items", "items"); 
      } 

      setListAdapter (new ArrayAdapter<String>(this, R.layout.single_item, items)); 
      ListView list = getListView(); 
      list.setTextFilterEnabled(true); 


      list.setOnItemClickListener(new OnItemClickListener(){ 

       public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 
         long arg3) { 
        // TODO Auto-generated method stub 
        Toast.makeText(getApplicationContext(), ((TextView) arg1).getText(),1000).show(); 
       } 



      }); 


     } catch(Exception e){ 
      // In your production code handle any errors and catch the individual exceptions 
      e.printStackTrace(); 
     } 

    } 

















    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.menu, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 

     if (item.getItemId() == R.id.home) { 

      startActivity(new Intent(TwitterActivity.this, HomeActivity.class)); 

      return(true); 
     } 


     if (item.getItemId() == R.id.match) { 

      startActivity(new Intent(TwitterActivity.this, MatchActivity.class)); 

      return(true); 
     } 



     if (item.getItemId() == R.id.teams) { 

      startActivity(new Intent(TwitterActivity.this, TeamsActivity.class)); 

      return(true); 
     } 



     if (item.getItemId() == R.id.twitter) { 

      startActivity(new Intent(TwitterActivity.this, TwitterActivity.class)); 

      return(true); 
     } 

     if (item.getItemId() == R.id.info) { 

      startActivity(new Intent(TwitterActivity.this, InfoActivity.class)); 

      return(true); 
     } 


     return(super.onOptionsItemSelected(item)); 


    } 




} 
+0

难道你不能只是调用提取数据的方法吗? – nhaarman 2012-03-11 15:38:01

回答

1

你可以发表你的活动休息吗?特别是您第一次使用的部分加载列表。

可能没有必要重新开始整个活动。你只需要将代码中填充你列表的部分移动到它自己的方法中。然后,您可以在用户想要刷新时调用该方法。

如果不出意外,你应该改变:

Intent reload = new Intent(getApplicationContext(), TwitterActivity.class); 

Intent reload = new Intent(TwitterActivity.this, TwitterActivity.class); 

编辑: 您需要在try/catch块移动到一个新的方法称为刷新()。然后在您想重新加载列表的任何时候调用该方法。像这样:

将您的网络移出主线程也是一个不好的主意。

public class TwitterActivity extends ListActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.twitteract); 


    Button refresh = (Button) findViewById(R.id.btn_refresh); 

    //Listening to button event 
    refresh.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View arg0) { 
      refresh(); 


     } 
    }); 



    refresh(); 



} 

private void refresh(){ 

    try{ 
     // Create a new HTTP Client 
     DefaultHttpClient defaultClient = new DefaultHttpClient(); 
     // Setup the get request 
     HttpGet httpGetRequest = new HttpGet("https://api.twitter.com/1/statuses/user_timeline.json?screen_name=evostikleague&count=10"); 

     // Execute the request in the client 
     HttpResponse httpResponse = defaultClient.execute(httpGetRequest); 
     // Grab the response 
     BufferedReader reader = new BufferedReader(new InputStreamReader(httpResponse.getEntity().getContent(), "UTF-8")); 
     String json = reader.readLine(); 

     Log.v(json,"jsonfeed"); 




     List<String> items = new ArrayList<String>(); 

      //items.add(json); 


     JSONArray jArray = new JSONArray(json); 


     for (int i=0; i < jArray.length(); i++) 
     { JSONObject oneObject = jArray.getJSONObject(i); 
      items.add(oneObject.getString("text")); 
      Log.i("items", "items"); 
     } 

     setListAdapter (new ArrayAdapter<String>(this, R.layout.single_item, items)); 
     ListView list = getListView(); 
     list.setTextFilterEnabled(true); 


     list.setOnItemClickListener(new OnItemClickListener(){ 

      public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 
        long arg3) { 
       // TODO Auto-generated method stub 
       Toast.makeText(getApplicationContext(), ((TextView) arg1).getText(),1000).show(); 
      } 



     }); 


    } catch(Exception e){ 
     // In your production code handle any errors and catch the individual exceptions 
     e.printStackTrace(); 
    } 




} 


@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.menu, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 

    if (item.getItemId() == R.id.home) { 

     startActivity(new Intent(TwitterActivity.this, HomeActivity.class)); 

     return(true); 
    } 


    if (item.getItemId() == R.id.match) { 

     startActivity(new Intent(TwitterActivity.this, MatchActivity.class)); 

     return(true); 
    } 



    if (item.getItemId() == R.id.teams) { 

     startActivity(new Intent(TwitterActivity.this, TeamsActivity.class)); 

     return(true); 
    } 



    if (item.getItemId() == R.id.twitter) { 

     startActivity(new Intent(TwitterActivity.this, TwitterActivity.class)); 

     return(true); 
    } 

    if (item.getItemId() == R.id.info) { 

     startActivity(new Intent(TwitterActivity.this, InfoActivity.class)); 

     return(true); 
    } 


    return(super.onOptionsItemSelected(item)); 


} 

} 
+0

好吧我编辑了上面的代码 – iamlukeyb 2012-03-11 15:45:59

+0

你需要将你的刷新块移动到它自己的方法,请参阅我的编辑。 – FoamyGuy 2012-03-11 16:36:56

1

使用菜单提供刷新选项。因此,当用户按下手机上的菜单按钮,他们可以选择刷新命令重新鸣叫

+0

我想他是想知道如何实现刷新,而不是在UI中放置选项的位置。 – FoamyGuy 2012-03-11 15:41:29

+0

我只是想知道如何刷新,但仍然有趣的android用户如何与界面交互我有一个标题栏和一个刷新按钮,在视觉上看起来不错,但有没有任何一点,如果android用户习惯了菜单或我应该实现两个 – iamlukeyb 2012-03-11 15:48:34

0

这是更古老的刷新按钮,但我在我的应用程序中工作得很好。

public void refresh(View view){   //refresh is onClick name 
    onRestart(); 
} 

@Override 
protected void onRestart() { 

    // TODO Auto-generated method stub 
    super.onRestart(); 
    Intent i = new Intent(lala.this, lala.class); //your class 
    startActivity(i); 
    finish(); 

}