2013-02-27 75 views
0

首先讓我指出這是我第一次編寫應用程序,甚至是Java。我已經習慣了編碼PHP和JS所以請善待從MainActivity以外的類中調用intent

林繼谷歌引導http://developer.android.com/training/basics/network-ops/connecting.html

這是我的主要活動

package com.example.eerstetest; 

import android.app.Activity; 
import android.content.Context; 
import android.content.Intent; 
import android.net.ConnectivityManager; 
import android.net.NetworkInfo; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.View; 
import android.widget.EditText; 

public class MainActivity extends Activity { 
public final static String EXTRA_MESSAGE = "com.example.eerstetest.MESSAGE"; 

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

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

public void sendMessage(View view) { 
    Intent intent = new Intent(this, DisplayMessageActivity.class); 
    EditText editText = (EditText) findViewById(R.id.edit_message); 
    String message = editText.getText().toString(); 
    intent.putExtra(EXTRA_MESSAGE, message); 
    startActivity(intent); 
} 

public void getUpdate(View view) { 
    Intent intent = new Intent(this, DisplayMessageActivity.class); 

    // see if there is a data connection 
    ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo networkInfo = connMgr.getActiveNetworkInfo(); 
    if (networkInfo != null && networkInfo.isConnected()) { 
     // fetch data 
     //textView.setText("Network connection available."); 
     String dataUrl = "http://www.myurl.com"; 
     new DownloadUpdate().execute(dataUrl); 
    } else { 
     // display error 
     //textView.setText("No network connection available."); 
     String message = "No network connection available."; 
     intent.putExtra(EXTRA_MESSAGE, message); 
     startActivity(intent); 
    } 
} 
} 

正如你可以看到我有一個的sendMessage方法,它的工作原理,使用DisplayMessageActivity 我也有getUpdate方法,至極調用DownloadUpdate類,這是在一個單獨的java文件

package com.example.eerstetest; 

import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.Reader; 
import java.io.UnsupportedEncodingException; 
import java.net.HttpURLConnection; 
import java.net.URL; 

import android.content.Context; 
import android.content.Intent; 
import android.os.AsyncTask; 
import android.util.Log; 

// Uses AsyncTask to create a task away from the main UI thread. This task takes a 
// URL string and uses it to create an HttpUrlConnection. Once the connection 
// has been established, the AsyncTask downloads the contents of the webpage as 
// an InputStream. Finally, the InputStream is converted into a string, which is 
// displayed in the UI by the AsyncTask's onPostExecute method. 
public class DownloadUpdate extends AsyncTask<String, Integer, String> { 
private static final String DEBUG_TAG = "HttpExample"; 
//private TextView textView; 
public final static String EXTRA_MESSAGE = "com.example.eerstetest.MESSAGE"; 

@Override 
protected String doInBackground(String... url) { 

    // params comes from the execute() call: params[0] is the url. 
    try { 
     return downloadUrl(url[0]); 
    } catch (IOException e) { 
     return "Unable to retrieve web page. URL may be invalid."; 
    } 
} 

// onPostExecute displays the results of the AsyncTask. 
@Override 
protected void onPostExecute(String result) { 
    //textView.setText(result); 
    Intent intent = new Intent(this, DisplayMessageActivity.class); 
    intent.putExtra(EXTRA_MESSAGE, result); 
    startActivity(intent); 
} 

// Given a URL, establishes an HttpUrlConnection and retrieves 
// the web page content as a InputStream, which it returns as 
// a string. 
private String downloadUrl(String myurl) throws IOException { 
    InputStream is = null; 
    // Only display the first 500 characters of the retrieved 
    // web page content. 
    int len = 500; 

    try { 
     URL url = new URL(myurl); 
     HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
     conn.setReadTimeout(10000 /* milliseconds */); 
     conn.setConnectTimeout(15000 /* milliseconds */); 
     conn.setRequestMethod("GET"); 
     conn.setDoInput(true); 
     // Starts the query 
     conn.connect(); 
     int response = conn.getResponseCode(); 
     Log.d(DEBUG_TAG, "The response is: " + response); 
     is = conn.getInputStream(); 

     // Convert the InputStream into a string 
     String contentAsString = readIt(is, len); 
     return contentAsString; 

    // Makes sure that the InputStream is closed after the app is 
    // finished using it. 
    } finally { 
     if (is != null) { 
      is.close(); 
     } 
    } 
} 

// Reads an InputStream and converts it to a String. 
public String readIt(InputStream stream, int len) throws IOException, UnsupportedEncodingException { 
    Reader reader = null; 
    reader = new InputStreamReader(stream, "UTF-8");   
    char[] buffer = new char[len]; 
    reader.read(buffer); 
    return new String(buffer); 
} 
} 

我不明白我打電話從這裏DisplayMessageActivity

要完成時填寫的背景下,在這裏爲m清單文件

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.example.eerstetest" 
android:versionCode="1" 
android:versionName="1.0" > 

<uses-sdk 
    android:minSdkVersion="8" 
    android:targetSdkVersion="17" /> 

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name="com.example.eerstetest.MainActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name="com.example.eerstetest.DisplayMessageActivity" 
     android:label="@string/title_activity_display_message" 
     android:parentActivityName="com.example.eerstetest.MainActivity" > 
     <meta-data 
      android:name="android.support.PARENT_ACTIVITY" 
      android:value="com.example.eerstetest.MainActivity" /> 
    </activity> 
    <activity 
     android:name="com.example.eerstetest.DownloadUpdate" 
     android:label="@string/title_activity_download_update" > 
    </activity> 
</application> 

</manifest> 

如果有任何額外的我可以提供,請讓我知道

回答

1

通過上下文這樣的參數:

new DownloadUpdate(MainActivity.this).execute(dataUrl); 

附加構造函數DownloadUpdate:

Context context; 
public DownloadUpdate(Context context){ 
    this.context = context 
} 

,然後使用上下文在DownloadUpdate類作爲一個全球性的參數,並使用該

Intent intent = new Intent(DownloadUpdate.this, DisplayMessageActivity.class); 
intent.putExtra(EXTRA_MESSAGE, result); 
context.startActivity(intent); 
+0

這樣做,非常感謝! – Surya 2013-02-27 10:30:13

0

調用是這樣的:

Intent intent = new Intent(DownloadUpdate.this, DisplayMessageActivity.class); 
intent.putExtra(EXTRA_MESSAGE, result); 
startActivity(intent); 
+0

我試過這個,並沒有工作,但由阿南德(類似)的答案確實工作。謝謝。 – Surya 2013-02-27 10:30:55

0

我覺得你從調用DownloadUpdate調用的意圖另一類或活動爲:

new DownloadUpdate().execute(params); 

解決上下文問題DownloadUpdate,創建一個構造函數,如:

public DownloadUpdate(Context context){ 
    this.context = context; 
} 

這裏this.context意味着您的全局聲明Context變量DownloadUpdate類。然後調用DownloadUpdate爲:

new DownloadUpdate(your_context).execute(params); 

然後使用你的背景下DownloadUpdate去創造你的意圖。像:

@Override 
protected void onPostExecute(String result) { 
    //textView.setText(result); 
    Intent intent = new Intent(context, DisplayMessageActivity.class); 
    intent.putExtra(EXTRA_MESSAGE, result); 
    startActivity(intent); 
} 
相關問題