2012-08-25 218 views
0

我想提交與當前位置的Android用戶註冊表單。我是新來的Android和Java開發。當我嘗試訪問我的名稱值對代碼中的myLat和myLan onLocationChanged方法時,無法找到這兩個變量。我怎樣才能訪問我的名字值對代碼中的兩個變量。從另一種方法訪問變量

package com.imran; 

import java.io.IOException; 
import java.util.ArrayList; 
import java.util.List; 

import org.apache.http.HttpResponse; 
import org.apache.http.NameValuePair; 
import org.apache.http.client.ClientProtocolException; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.entity.UrlEncodedFormEntity; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.message.BasicNameValuePair; 

import com.google.android.gcm.GCMRegistrar; 
import com.google.android.maps.MyLocationOverlay; 

import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.os.Bundle; 
import android.os.StrictMode; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Toast; 
import android.app.Activity; 
import android.content.Context; 

public class Register extends Activity { 




    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_register); 
     final EditText email_id = (EditText) findViewById(R.id.email_id) ; 
     final EditText name = (EditText) findViewById(R.id.name); 
     final EditText password = (EditText) findViewById(R.id.password); 
     Button button = (Button) findViewById(R.id.button1) ; 



     //generate GCM id 
     GCMRegistrar.checkDevice(this); 
     GCMRegistrar.checkManifest(this); 
     final String regId = GCMRegistrar.getRegistrationId(this); 
     if (regId.equals("")) { 
      GCMRegistrar.register(this, "12356"); 

     } else { 
     String TAG = null; 
     Log.v(TAG, regId); 

     } 
     //generate GCM id ended 
     StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
     StrictMode.setThreadPolicy(policy); 
     //get current location 

     LocationManager manager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); 
     LocationListener listner = new LocationListener() { 

      @Override 
      public void onStatusChanged(String arg0, int arg1, Bundle arg2) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void onProviderEnabled(String arg0) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void onProviderDisabled(String arg0) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void onLocationChanged(Location location) { 
       double myLonDouble = location.getLongitude(); 
      final String myLon = Double.toString(myLonDouble); 
       double myLatDouble = location.getLatitude(); 
       final String myLat = Double.toString(myLatDouble); 

      } 
     }; 
     manager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, listner); 



     //end get current location 

     button.setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View arg0) { 
     // TODO Auto-generated method stub 
     //postData(); 
      HttpClient httpclient = new DefaultHttpClient(); 
      HttpPost httppost = new HttpPost("http://xyz.com/folder/register.php"); 

      try { 
       // Add your data 
       List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); 
       nameValuePairs.add(new BasicNameValuePair("email", email_id.getText().toString())); 
       nameValuePairs.add(new BasicNameValuePair("name", name.getText().toString())); 
       nameValuePairs.add(new BasicNameValuePair("password", password.getText().toString())); 
       nameValuePairs.add(new BasicNameValuePair("regid", regId)); 
       nameValuePairs.add(new BasicNameValuePair("uid", "2")); 
       nameValuePairs.add(new BasicNameValuePair("lat",myLat)); 
       nameValuePairs.add(new BasicNameValuePair("lon",myLon)); 
       httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

       // Execute HTTP Post Request 
       //Toast.makeText(this, resId, duration) 
       HttpResponse response = httpclient.execute(httppost); 

      } catch (ClientProtocolException e) { 
       // TODO Auto-generated catch block 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
      } 

    } 
}); 

    } 


} 

回答

4

您應該研究scopemember variables。事情是,你不能在一種方法中聲明一件事,然後嘗試從另一種方法訪問它。

因此,我們將該事物聲明爲成員變量,並將其定義爲一個方法,然後可以在另一個方法中使用它。

像這樣(我標誌着我與**評論):

public class Register extends Activity { 

    // "private" means it can only be accessed from this class 
    private String myLat = null; // ** Declare myLat 
    private String myLon = null; // ** Declare myLon 


    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_register); 
     final EditText email_id = (EditText) findViewById(R.id.email_id) ; 
     final EditText name = (EditText) findViewById(R.id.name); 
     final EditText password = (EditText) findViewById(R.id.password); 
     Button button = (Button) findViewById(R.id.button1) ; 



     //generate GCM id 
     GCMRegistrar.checkDevice(this); 
     GCMRegistrar.checkManifest(this); 
     final String regId = GCMRegistrar.getRegistrationId(this); 
     if (regId.equals("")) { 
      GCMRegistrar.register(this, "12356"); 

     } else { 
     String TAG = null; 
     Log.v(TAG, regId); 

     } 
     //generate GCM id ended 
     StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
     StrictMode.setThreadPolicy(policy); 
     //get current location 

     LocationManager manager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); 
     LocationListener listner = new LocationListener() { 

      @Override 
      public void onStatusChanged(String arg0, int arg1, Bundle arg2) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void onProviderEnabled(String arg0) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void onProviderDisabled(String arg0) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void onLocationChanged(Location location) { 
       double myLonDouble = location.getLongitude(); 
       myLon = Double.toString(myLonDouble); // ** Define myLon 
       double myLatDouble = location.getLatitude(); 
       myLat = Double.toString(myLatDouble); // ** Define myLat 

      } 
     }; 
     manager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, listner); 



     //end get current location 

     button.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
     // TODO Auto-generated method stub 
     // ** Check if they have been defined 
     if (myLat == null || myLon == null) 
      return; 

     //postData(); 
      HttpClient httpclient = new DefaultHttpClient(); 
      HttpPost httppost = new HttpPost("http://xyz.com/folder/register.php"); 

      try { 
      // Add your data 
      List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); 
      nameValuePairs.add(new BasicNameValuePair("email", email_id.getText().toString())); 
      nameValuePairs.add(new BasicNameValuePair("name", name.getText().toString())); 
      nameValuePairs.add(new BasicNameValuePair("password", password.getText().toString())); 
      nameValuePairs.add(new BasicNameValuePair("regid", regId)); 
      nameValuePairs.add(new BasicNameValuePair("uid", "2")); 
      nameValuePairs.add(new BasicNameValuePair("lat",myLat)); 
      nameValuePairs.add(new BasicNameValuePair("lon",myLon)); 
       httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

      // Execute HTTP Post Request 
       //Toast.makeText(this, resId, duration) 
      HttpResponse response = httpclient.execute(httppost); 

      } catch (ClientProtocolException e) { 
      // TODO Auto-generated catch block 
      } catch (IOException e) { 
      // TODO Auto-generated catch block 
      } 

     } 
    }); 

    } 


} 
+0

感謝您的支持和資源埃裏克。 – imran

+0

沒問題!祝你好運! :) – Eric

1

您的變量範圍有問題。您正在初始化的myLatDouble和myLon Double只存在於創建它們的onLocationChanged方法中。您必須在不同的地方聲明它們,以便在嘗試訪問它們時不會超出範圍,或者您必須將它們作爲參數傳遞給nameValuePairs代碼。