Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将活动更改为类-Android_Java_Android_Class_Android Activity - Fatal编程技术网

Java 将活动更改为类-Android

Java 将活动更改为类-Android,java,android,class,android-activity,Java,Android,Class,Android Activity,我对Java和Android有些陌生,我在类和活动方面遇到了麻烦。我正在清理我的代码,并将很多代码从MainActivity移动到不同的类,但我只能通过创建新的活动而不是类来让应用程序工作 我需要留在主视图中,只使用类的方法 从主活动a按钮,倒计时,然后调用LocationActivity LocationActivity查找GPS坐标,然后将其发送给SendActivity 这是我让它工作的唯一方法,因为我只需要启动locationListener,所以我只是在onCreate部分启动它

我对Java和Android有些陌生,我在类和活动方面遇到了麻烦。我正在清理我的代码,并将很多代码从MainActivity移动到不同的类,但我只能通过创建新的活动而不是类来让应用程序工作

  • 我需要留在主视图中,只使用类的方法
  • 从主活动a按钮,倒计时,然后调用LocationActivity
  • LocationActivity查找GPS坐标,然后将其发送给SendActivity
这是我让它工作的唯一方法,因为我只需要启动locationListener,所以我只是在onCreate部分启动它

MainActivity.java

    public class MainActivity extends Activity {

    Button mCloseButton;
    Button mOpenButton;
    MultiDirectionSlidingDrawer mDrawer;

    private Button send_button;
    Button sendButton;
    EditText msgTextField;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature( Window.FEATURE_NO_TITLE );
        setContentView(R.layout.main);

        send_button = (Button)findViewById(R.id.button2); 

        mDrawer.open();

        mCloseButton.setOnClickListener( new OnClickListener() {
            public void onClick( View v )
            {
                mDrawer.animateClose();
            }
        });

        mOpenButton.setOnClickListener( new OnClickListener() {

            public void onClick( View v )
            {
                if( !mDrawer.isOpened() )
                    mDrawer.animateOpen();
            }
        });

        final SharedPreferences shared = getSharedPreferences("PEOPLE_PREFERENCES", MODE_PRIVATE);
        final String first = shared.getString("FIRSTNAME", "");
        final String last = shared.getString("LASTNAME", "0");


       ///////Profile Button//////////////// 
        Button profile = (Button) findViewById(R.id.button1);
        profile.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                startActivity(new Intent(MainActivity.this, PreferencesActivity.class));
            }
        });
        ///////////////////////////////////

       //////Generate ID//////////////////
        if (usr_id == null) {

            char[] chars = "abcdefghijklmnopqrstuvwxyzABSDEFGHIJKLMNOPQRSTUVWXYZ1234567890".toCharArray();
            Random r = new Random(System.currentTimeMillis());
            char[] id = new char[8];
            for (int i = 0;  i < 8;  i++) {
                id[i] = chars[r.nextInt(chars.length)];
            }
            usr_id = new String(id);
            Editor editor = shared.edit();
            editor.putString("USR_ID", usr_id);
            editor.commit();
        }
        //////////////////////////////////                 

        ////////Send Alert////////////////
        ///////Begin Timer///////////////
        send_button.setOnClickListener(new OnClickListener() {

            private boolean running = false;
            private CountDownTimer timer;
            public void onClick(View v) {
              if(!running)
              {
                running = true;
                timer = new CountDownTimer(4000, 1000) {

                    @Override
                    public void onFinish() {
                        send_button.setText("SENT");  
                        startActivity(new Intent(MainActivity.this, LocationActivity.class));
                        SendUserActivity.sendId(usr_id1, first, last);                                          
                    }

                    @Override
                    public void onTick(long sec) {
                        send_button.setText("CANCEL (" + sec / 1000 + ")");

                    }
                }.start();
              }
              else
              {
                 timer.cancel();
                 send_button.setText("Send!");
                 running = false;
              }
            }
        });
    }  
    ///////////////////////////////////


    @Override
   public void onContentChanged()
   {
    super.onContentChanged();
    mCloseButton = (Button) findViewById( R.id.button_open );
    mOpenButton = (Button) findViewById( R.id.button_open );
    mDrawer = (MultiDirectionSlidingDrawer) findViewById( R.id.drawer );
   }
}
    package com.alex.www;

import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.util.Log;
import android.widget.Button;

public class LocationActivity extends Activity {


    private LocationManager locManager;
    private LocationListener locListener;


    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        startLocation();
    }

    void startLocation()
    {   

        SharedPreferences shared = getSharedPreferences("PEOPLE_PREFERENCES", MODE_PRIVATE);
    final String usr_id2 = shared.getString("USR_ID", "none");

    //get a reference to the LocationManager
    locManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);


    //checked to receive updates from the position
    locListener = new LocationListener() {
        public void onLocationChanged(Location location) {
            SendActivity.send(location, usr_id2);
        }
        public void onProviderDisabled(String provider){
            //labelState.setText("Provider OFF");
        }
        public void onProviderEnabled(String provider){
            //labelState.setText("Provider ON ");
        }
        public void onStatusChanged(String provider, int status, Bundle extras){
            Log.i("", "Provider Status: " + status);
            }
        };

        locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locListener);
    }
}
    package com.alex.www;

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

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 android.app.Activity;
import android.content.SharedPreferences;
import android.location.Location;
import android.os.Bundle;
import android.util.Log;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class SendActivity extends Activity {

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    public static void send(Location loc, String usr_id2)
    {

         Log.i("", String.valueOf(loc.getLatitude() + " - " + String.valueOf(loc.getLongitude())));

         String lat = String.valueOf(loc.getLatitude()); 
         String lon = String.valueOf(loc.getLongitude());

        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost("http://example.com/test/example.php");

         try {
           List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
           nameValuePairs.add(new BasicNameValuePair("lat", lat)); 
           nameValuePairs.add(new BasicNameValuePair("lon", lon));
           nameValuePairs.add(new BasicNameValuePair("id", usr_id2));
           httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
           httpclient.execute(httppost);
         } 
         catch (ClientProtocolException e) {
             // TODO Auto-generated catch block
         } 
         catch (IOException e) {
             // TODO Auto-generated catch block
         }
    }

}
SendActivity.java

    public class MainActivity extends Activity {

    Button mCloseButton;
    Button mOpenButton;
    MultiDirectionSlidingDrawer mDrawer;

    private Button send_button;
    Button sendButton;
    EditText msgTextField;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature( Window.FEATURE_NO_TITLE );
        setContentView(R.layout.main);

        send_button = (Button)findViewById(R.id.button2); 

        mDrawer.open();

        mCloseButton.setOnClickListener( new OnClickListener() {
            public void onClick( View v )
            {
                mDrawer.animateClose();
            }
        });

        mOpenButton.setOnClickListener( new OnClickListener() {

            public void onClick( View v )
            {
                if( !mDrawer.isOpened() )
                    mDrawer.animateOpen();
            }
        });

        final SharedPreferences shared = getSharedPreferences("PEOPLE_PREFERENCES", MODE_PRIVATE);
        final String first = shared.getString("FIRSTNAME", "");
        final String last = shared.getString("LASTNAME", "0");


       ///////Profile Button//////////////// 
        Button profile = (Button) findViewById(R.id.button1);
        profile.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                startActivity(new Intent(MainActivity.this, PreferencesActivity.class));
            }
        });
        ///////////////////////////////////

       //////Generate ID//////////////////
        if (usr_id == null) {

            char[] chars = "abcdefghijklmnopqrstuvwxyzABSDEFGHIJKLMNOPQRSTUVWXYZ1234567890".toCharArray();
            Random r = new Random(System.currentTimeMillis());
            char[] id = new char[8];
            for (int i = 0;  i < 8;  i++) {
                id[i] = chars[r.nextInt(chars.length)];
            }
            usr_id = new String(id);
            Editor editor = shared.edit();
            editor.putString("USR_ID", usr_id);
            editor.commit();
        }
        //////////////////////////////////                 

        ////////Send Alert////////////////
        ///////Begin Timer///////////////
        send_button.setOnClickListener(new OnClickListener() {

            private boolean running = false;
            private CountDownTimer timer;
            public void onClick(View v) {
              if(!running)
              {
                running = true;
                timer = new CountDownTimer(4000, 1000) {

                    @Override
                    public void onFinish() {
                        send_button.setText("SENT");  
                        startActivity(new Intent(MainActivity.this, LocationActivity.class));
                        SendUserActivity.sendId(usr_id1, first, last);                                          
                    }

                    @Override
                    public void onTick(long sec) {
                        send_button.setText("CANCEL (" + sec / 1000 + ")");

                    }
                }.start();
              }
              else
              {
                 timer.cancel();
                 send_button.setText("Send!");
                 running = false;
              }
            }
        });
    }  
    ///////////////////////////////////


    @Override
   public void onContentChanged()
   {
    super.onContentChanged();
    mCloseButton = (Button) findViewById( R.id.button_open );
    mOpenButton = (Button) findViewById( R.id.button_open );
    mDrawer = (MultiDirectionSlidingDrawer) findViewById( R.id.drawer );
   }
}
    package com.alex.www;

import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.util.Log;
import android.widget.Button;

public class LocationActivity extends Activity {


    private LocationManager locManager;
    private LocationListener locListener;


    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        startLocation();
    }

    void startLocation()
    {   

        SharedPreferences shared = getSharedPreferences("PEOPLE_PREFERENCES", MODE_PRIVATE);
    final String usr_id2 = shared.getString("USR_ID", "none");

    //get a reference to the LocationManager
    locManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);


    //checked to receive updates from the position
    locListener = new LocationListener() {
        public void onLocationChanged(Location location) {
            SendActivity.send(location, usr_id2);
        }
        public void onProviderDisabled(String provider){
            //labelState.setText("Provider OFF");
        }
        public void onProviderEnabled(String provider){
            //labelState.setText("Provider ON ");
        }
        public void onStatusChanged(String provider, int status, Bundle extras){
            Log.i("", "Provider Status: " + status);
            }
        };

        locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locListener);
    }
}
    package com.alex.www;

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

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 android.app.Activity;
import android.content.SharedPreferences;
import android.location.Location;
import android.os.Bundle;
import android.util.Log;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class SendActivity extends Activity {

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    public static void send(Location loc, String usr_id2)
    {

         Log.i("", String.valueOf(loc.getLatitude() + " - " + String.valueOf(loc.getLongitude())));

         String lat = String.valueOf(loc.getLatitude()); 
         String lon = String.valueOf(loc.getLongitude());

        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost("http://example.com/test/example.php");

         try {
           List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
           nameValuePairs.add(new BasicNameValuePair("lat", lat)); 
           nameValuePairs.add(new BasicNameValuePair("lon", lon));
           nameValuePairs.add(new BasicNameValuePair("id", usr_id2));
           httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
           httpclient.execute(httppost);
         } 
         catch (ClientProtocolException e) {
             // TODO Auto-generated catch block
         } 
         catch (IOException e) {
             // TODO Auto-generated catch block
         }
    }

}
package.com.alex.www;
导入java.io.IOException;
导入java.util.ArrayList;
导入java.util.List;
导入org.apache.http.NameValuePair;
导入org.apache.http.client.ClientProtocolException;
导入org.apache.http.client.HttpClient;
导入org.apache.http.client.entity.UrlEncodedFormEntity;
导入org.apache.http.client.methods.HttpPost;
导入org.apache.http.impl.client.DefaultHttpClient;
导入org.apache.http.message.BasicNameValuePair;
导入android.app.Activity;
导入android.content.SharedReferences;
导入android.location.location;
导入android.os.Bundle;
导入android.util.Log;
导入android.widget.Button;
导入android.widget.EditText;
导入android.widget.TextView;
公共类SendActivity扩展了活动{
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
}
公共静态无效发送(位置loc,字符串usr_id2)
{
Log.i(“”,String.valueOf(loc.getLatitude()+“-”+String.valueOf(loc.getLatitude()));
String lat=String.valueOf(loc.getLatitude());
String lon=String.valueOf(loc.getLongitude());
HttpClient HttpClient=新的DefaultHttpClient();
HttpPost HttpPost=新的HttpPost(“http://example.com/test/example.php");
试一试{
List nameValuePairs=新的ArrayList(2);
添加(新的BasicNameValuePair(“lat”,lat));
添加(新的BasicNameValuePair(“lon”,lon));
添加(新的BasicNameValuePair(“id”,usr_id2));
setEntity(新的UrlEncodedFormEntity(nameValuePairs));
httpclient.execute(httppost);
} 
捕获(客户端协议例外e){
//TODO自动生成的捕捉块
} 
捕获(IOE异常){
//TODO自动生成的捕捉块
}
}
}

我编辑了你的文章以使其更清晰,因为这个问题很有趣。这是许多新开发人员在开始使用android时面临的两难境地。相信我,我见过非常糟糕的代码。在正确的时间得到正确的建议是很重要的。这就来了

你在正确的轨道上。每个视图都必须有自己的活动。别改掉那个习惯。如果您选择java方式,那么您很可能不使用activity,但这将使您成为非常糟糕的android开发人员

是的,你确实需要阅读更多关于如何编写android应用程序的内容


如果您使用1视图1活动原则,android操作系统将非常支持您。例如,将支持按顺序向后遍历后退按钮

一般做法是:

使它们成为类(移除扩展活动)并为接受上下文作为参数的两个类生成构造函数。准备好你们的方法,在主活动中创建这个类的新实例,这样你们就可以使用它的方法了。也许你需要适应一些东西,但这应该不是什么大问题


顺便说一句:建议使用管理所有长操作(如位置更新、http发送/接收),这样您的UI不会被冻结,您可以避免强制关闭。

活动是一个类。他说,如果您需要执行任何使用外部服务的操作,或者执行一些可能很长的操作,那么最好使用AsyncTask在自己的线程上执行。请详细了解

恕我直言,先学习Java,而不必同时学习Android。我相信你不会感激这条建议,但一旦你对Java有了深入的了解,你就会明白这是你最好的行动方式。你能给我一个代码示例吗?只是为了让我开始。如果我从LocationActivity中删除extends活动部分,
getSystemService
将抛出一个错误,并要求我为其创建一个方法。碎片会发生什么?不理解您的问题吗?