2012-07-12 143 views
0

搜索API会将一些元数据(即url“eventURL”和trackbackurl,即“trackBack”)返回给我。我将数据放在listview中,每行都包含一些数据和一个唯一的url和trackback url。当用户点击列表视图中的行时,会显示一个警告对话框,显示用户2的选项。点击选项1应该在webview中启动trackback url,同时点击第二个opion应该在webview中启动eventURL。我为它创建了一个WebViewActivity,问题是我的webview始终是空白的。Webview空白或为不同的URL加载相同的页面

主要活动

package my.stayactive.plan; 


import java.text.SimpleDateFormat; 
import java.util.Calendar; 
import java.util.Date; 

import my.stayactive.plan.ActiveHelper.ApiException; 

import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import android.app.Activity; 
import android.app.AlertDialog; 
import android.app.ProgressDialog; 
import android.content.Context; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.net.Uri; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup; 
import android.view.inputmethod.InputMethodManager; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.BaseAdapter; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.ListView; 
import android.widget.Spinner; 
import android.widget.TextView; 
import android.widget.Toast; 


public class StayActiveActivity extends Activity implements OnItemClickListener { 

    //private EditText m_search_text; 
    protected EditText m_zip; 
    private ListView m_search_results; 
    private Button m_search_btn; 
    private JSONArray m_results; 
    private LayoutInflater m_inflater; 
    private InputMethodManager m_ctrl; 
    private Spinner m_radius; 
    private Spinner m_activity_selector; 
    public static int radius = 0; 
    public static String activities; 
    public String url; 
    public String trackBack; 
    public static String assetId; 


    static final private int EXIT_ID = Menu.FIRST; 



    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.main); 
     // m_search_text = (EditText) findViewById(R.id.search_text); 
     m_zip = (EditText) findViewById(R.id.zip); 
     m_search_btn = (Button) findViewById(R.id.search_button); 
     // m_searchm_results = (ListView) findViewById(R.id.lview); 
     m_search_btn .setOnClickListener(go_handler); 

     m_ctrl = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
     m_inflater = LayoutInflater.from(this); 
     addListenerOnSpinnerItemSelection(); 
     addListenerOnSpinner1ItemSelection(); 

     m_search_results = (ListView)findViewById(R.id.lview); 
     m_search_results.setOnItemClickListener(this); 

    } 

    public void addListenerOnSpinnerItemSelection() { 
     m_radius = (Spinner) findViewById(R.id.spinner); 
     m_radius.setOnItemSelectedListener(new CustomOnItemSelectedListener()); 
     } 

    public void addListenerOnSpinner1ItemSelection(){ 
     m_activity_selector = (Spinner) findViewById(R.id.spinner1); 
     m_activity_selector.setOnItemSelectedListener(new ActivitySelectedListener()); 
     } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu){ 
     super.onCreateOptionsMenu(menu); 

     menu.add(0, EXIT_ID, 0, R.string.exit); 
     return true; 
     } 
    @Override 
    public boolean onOptionsItemSelected (MenuItem item){ 

     switch (item.getItemId()){ 
     case EXIT_ID: 
      finish(); 
      return true; 

     } 

     return super.onOptionsItemSelected(item); 

    } 



    OnClickListener go_handler = new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      //m_ctrl.hideSoftInputFromWindow(m_search_text.getWindowToken(), 0); 
      m_ctrl.hideSoftInputFromWindow(m_zip.getWindowToken(), 0); 

      //String searchText = Uri.encode(m_search_text.getText().toString()); 
      String zip = Uri.encode(m_zip.getText().toString()); 

      new SearchTask().execute("?k=Fall+Classic" + "&m=meta:channel=" + activities + "&l="+ zip + "&r=" + radius); 
      // Show a toast showing the search text 
      Toast.makeText(getApplicationContext(), 
        getString(R.string.search_msg) + " " + 
        activities, Toast.LENGTH_LONG).show(); 
     } 
    }; 

    private class SearchTask extends AsyncTask<String, Integer, String> 
    { 

     ProgressDialog dialog; 

      @Override 
      protected void onPreExecute() { 

       dialog = ProgressDialog.show(StayActiveActivity.this,"","Please Wait..."); 

       super.onPreExecute(); 
      } 

      @Override 
      protected String doInBackground(String... params) { 
       try { 
        String result = ActiveHelper.download(params [0]); 
        return result; 
       } catch (ApiException e) { 
        e.printStackTrace(); 
        Log.e("alatta", "Problem making search request"); 
       } 
       return ""; 
      } 
      @Override 
      protected void onPostExecute(String result) { 
       dialog.hide(); 
       try { 
        JSONObject obj = new JSONObject(result); 
        m_results = obj.getJSONArray("_results"); 
        if (m_results == null || m_results.length() == 0) 
        { 
         Toast.makeText(getApplicationContext(), 
           "No Results found for " + activities, 
           Toast.LENGTH_LONG).show(); 

        } 
        else 
         m_search_results.setAdapter(new JSONAdapter(getApplicationContext())); 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 

    private class JSONAdapter extends BaseAdapter 
    { 
     public JSONAdapter(Context c){ 

     } 

     public int getCount() 
     { 
     return m_results.length(); 
      } 

     public Object getItem(int arg0){ 
      return null; 
     } 

     public long getItemId(int pos){ 
      return pos; 

     } 

     public View getView(int pos, View convertView, ViewGroup parent) { 
      View tv; 
      TextView t; 

      if (convertView == null) 
       tv = m_inflater.inflate (R.layout.item, parent, false); 
      else 
       tv = convertView; 
      try { 
       /* For each entry in the ListView, we need to populate 
       * its text and timestamp */ 
       t = (TextView) tv.findViewById(R.id.text); 
       JSONObject obj = m_results.getJSONObject(pos); 

       t.setText (obj.getString("title").replaceAll("</?(?i:<|>|...|&quot|&amp|;|)(.|\n)*?>", "")); 
         //("\\<.*?\\>", "")) 

       t = (TextView) tv.findViewById(R.id.created_at); 
       JSONObject meta = obj.getJSONObject("meta"); 
       // url = meta.getString("eventURL"); 
       trackBack = obj.getString("url"); 
       assetId = meta.getString("assetTypeId"); 
       //String eventDate = meta.getString("startDate"); 
       Calendar currentDate = Calendar.getInstance(); 
       long dateNow = currentDate.getTimeInMillis(); 


       String eventDate = meta.getString("startDate"); 
       String endDate = meta.getString("endDate"); 
       SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); 
       Date date = null; 
       Date date2 = null; 
      try { 
       date = formatter.parse(eventDate); 
       date2 = formatter.parse(endDate); 
      } catch (java.text.ParseException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
       long modifiedDate= date.getTime(); 
       long modifiedEndDate = date2.getTime(); 



       if (Long.valueOf(dateNow).compareTo(Long.valueOf(modifiedDate)) > 0 || Long.valueOf(dateNow).compareTo(Long.valueOf(modifiedEndDate)) > 0) 

       { 

        t.setText ("Was:" + "\t"+eventDate+"\n"+"Location:" +"\t" +meta.getString("location")+"\n" + meta.getString("eventURL") +"\n"+ obj.getString("url")); 

       } 
        else { 
        t.setText ("When:" + "\t"+eventDate+"\n"+"Location:" +"\t" +meta.getString("location")+"\n"+ meta.getString("eventURL") +"\n"+ obj.getString("url")); 
       } 


      } catch (JSONException e) { 

       Log.e("alatta", e.getMessage()); 
      } 
      return tv; 
     } 
    } 



    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     /*try { 
     JSONObject obj = m_results.getJSONObject(position); 
     JSONObject meta = obj.getJSONObject("meta"); 
     url = meta.getString("eventURL"); 


     //Intent intent = new Intent (StayActiveActivity.this, WebViewActivity.class); 
     //StayActiveActivity.this.startActivity(intent); 

     } catch (JSONException e) { 

      Log.e("alatta",e.getMessage()); 
     }*/ 



     // TODO Auto-generated method stub 
     final CharSequence[] items = {"Register", "Additional Information"}; 
     AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     builder.setTitle("Please Select an Option"); 
     builder.setItems(items, new DialogInterface.OnClickListener() { 


      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       // TODO Auto-generated method stub 

       if (which == 0){ 

        Intent intent1 = new Intent (StayActiveActivity.this, ReviewActivity.class); 
        StayActiveActivity.this.startActivity(intent1); 

       } 

       else if (which == 1){ 
       Intent intent = new Intent (StayActiveActivity.this, WebViewActivity.class); 
       StayActiveActivity.this.startActivity(intent); 

       } 

      } 
     }); 
    AlertDialog alert = builder.create(); 
    alert.show(); 

    }} 

WebViewActivity

package my.stayactive.plan; 


import android.os.Bundle; 
import android.view.KeyEvent; 
import android.webkit.WebSettings; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 

    public class WebViewActivity extends StayActiveActivity { 

      private WebView webView; 

      public void onCreate(Bundle savedInstanceState) { 
       super.onCreate(savedInstanceState); 
       setContentView(R.layout.webview); 

       webView = (WebView) findViewById(R.id.webView); 
       WebSettings setting = webView.getSettings(); 
       setting.setJavaScriptEnabled(true); 
       if (url != null && url.length()>0) { 
       webView.loadUrl(url); 

      } 
       } 


      } 

回答

3

您没有将URL传递给您的WebViewActivity。要做到这一点:

  • 在致电startActivity(),附上你的URL的意图与setData()
  • onCreate()WebViewActivity,检索与getData()的URL,然后加载它。

或搜索putExtra(...)。您可以使用Intent传输大量数据。

- 编辑 -

例子:

要设置数据:

import android.net.Uri; 

//... 
Intent intent = new Intent (StayActiveActivity.this, WebViewActivity.class); 
intent.setData(Uri.parse("your-url")); 
StayActiveActivity.this.startActivity(intent); 

检索数据:

//... 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    //... 
    Uri uri = getIntent().getData(); 

    //... 
    webView.loadUrl(uri.toString()); 
} 
+0

这里是我的新意图:'代码'意图intent =新的意图(StayActiveActivity.this,ReviewActivity.class); \t \t \t \t \t intent.putExtra(trackBack,true); StayActiveActivity。this.startActivity(intent1);我对WebviewActivity onCreate()进行了更改。String register = getIntent()。getStringExtra(trackBack); m_webView.loadUrl(register);我仍然看到一个空白的网页视图。 – 2012-07-12 20:10:37

+0

你的代码错了。因为你把一个布尔(“真”)。你可以把一个字符串意图。 – 2012-07-12 20:17:01

+0

你能用一个字符串来写一个setData()和getData()的例子吗? – 2012-07-12 20:38:46

0

我的猜测是,您的网址重定向和你没有处理重定向使正在显示什么。

尝试添加这对您的WebView活动:

mWebView.setWebViewClient(new WebViewClient() { 

     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) 
     { 
      view.loadUrl(url); 
      return false; 
     } 
}); 

而且这将是一个好主意,因为你在你的WebView活动有一个if语句来记录整个URL,这样你可以肯定,它实际上是正确地使其进入活动。如果不是,Web视图将永不加载任何东西。

编辑:实际上,仔细一看,它似乎并不像你在任何地方设置'url'变量,因此它将为空,因此不会因if语句调用loadUrl方法。

+0

我试过,但还是没能得到它工作。我已经注释掉了我修正的url变量。 – 2012-07-12 19:51:45

+1

@LaiVung在他的回答中声明,您并未将url作为额外添加到您的webview活动的意图中。所以它不知道要打开什么网址。 – FoamyGuy 2012-07-12 20:06:41

相关问题