Java 如何将活动中的okhttp3类与其他类分开
我在activity中创建了okhttp3方法,效果很好,但是我想从另一个activity调用这个okhttp3方法,所以我认为我需要通过创建单独的类来分离这个okhttp3,所以我需要如何创建单独的okhttp3类的帮助 这是我在活动中创建的方法Java 如何将活动中的okhttp3类与其他类分开,java,android,performance,android-studio,okhttp3,Java,Android,Performance,Android Studio,Okhttp3,我在activity中创建了okhttp3方法,效果很好,但是我想从另一个activity调用这个okhttp3方法,所以我认为我需要通过创建单独的类来分离这个okhttp3,所以我需要如何创建单独的okhttp3类的帮助 这是我在活动中创建的方法 public void getJsonData(final int method, final String email, final String password, final String page, final String token){
public void getJsonData(final int method, final String email, final String password, final String page, final String token){
OkHttpClient client = new OkHttpClient();
Request request;
RequestBody formBody;
HttpUrl gurl;
//mToken = token;
if(networkIsAvailable()){
if(method == POST){
mProgressBar.setVisibility(View.VISIBLE);
String url = "http://35.240.138.251/api/auth/login";
formBody = new FormBody.Builder()
.add("email", email)
.add("password", password)
.build();
request = new Request.Builder()
.url(url)
.post(formBody)
.build();
} else {
gurl = new HttpUrl.Builder()
.scheme("http")
.host("35.240.138.251")
.addPathSegment("api")
.addPathSegment(page)
.addQueryParameter("token",token)
.build();
request = new Request.Builder()
.url(gurl)
.build();
}
Call call = client.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
if(method == POST){
runOnUiThread(new Runnable() {
@Override
public void run() {
//Toast.makeText(getApplicationContext(),"Gangguan koneksi, periksa koneksi internet anda!",Toast.LENGTH_LONG).show();
SHOULD WE MOVE THIS --> errorAlert(); <--
--> login(); <--
}
});
} else {
runOnUiThread(new Runnable() {
@Override
public void run() {
String intoken = mJsonManager.getToken();
if(!nager.isEmpty()) {
getJsonData(GET,null,null,"wartarutin",intoken);
} else {
getJsonData(GET,null,null,"wartaprofil",intoken);
}
}
});
}
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if(response.code() == 401){
if(method == POST) {
runOnUiThread(new Runnable() {
@Override
public void run() {
--> reLoginAlert(); <--
}
});
} else {
runOnUiThread(new Runnable() {
@Override
public void run() {
getJsonData(POST,email,password,null,null);
}
});
}
}
if(response.isSuccessful()){
if(method == POST) {
try {
String jsonData = response.body().string();
mJsonManager.setToken(jsonData);
Log.v(TAG, jsonData);
runOnUiThread(new Runnable() {
@Override
public void run() {
-- > loginArea.setVisibility(View.INVISIBLE); <--
String inToken = mJsonManager.getToken();
mToken = inToken;
if (nager == null) {
getJsonData(GET, null, null, "wartaprofil", inToken);
} else {
getJsonData(GET, null, null, "wartarutin", inToken);
}
}
});
} catch (JSONException e) {
e.printStackTrace();
}
} else {
String jsonData = response.body().string();
switch(page){
case "wartaprofil":
try {
mJsonManager.setProfilStat(PrologueActivity.this, jsonData);
Log.v(TAG, jsonData);
runOnUiThread(new Runnable() {
@Override
public void run() {
--> openTitle(); <--
}
});
} catch (JSONException e) {
e.printStackTrace();
}
break;
case "wartarutin":
try {
mJsonManager.setWartaStat(PrologueActivity.this, jsonData);
Log.v(TAG, jsonData);
runOnUiThread(new Runnable() {
@Override
public void run() {
goToMainApp();
}
});
} catch (JSONException e) {
e.printStackTrace();
}
}
}
}
}
});
}
}
public void getJsonData(final int方法、final String电子邮件、final String密码、final String页面、final String令牌){
OkHttpClient=新的OkHttpClient();
请求;
请求体格式体;
HttpUrl-gurl;
//mToken=代币;
if(networkIsAvailable()){
if(方法==POST){
mProgressBar.setVisibility(View.VISIBLE);
字符串url=”http://35.240.138.251/api/auth/login";
formBody=新建formBody.Builder()
.添加(“电子邮件”,电子邮件)
.add(“密码”,password)
.build();
request=newrequest.Builder()
.url(url)
.职位(表格)
.build();
}否则{
gurl=newhttpurl.Builder()
.scheme(“http”)
.主机(“35.240.138.251”)
.addPathSegment(“api”)
.addPathSegment(第页)
.addQueryParameter(“令牌”,令牌)
.build();
request=newrequest.Builder()
.url(gurl)
.build();
}
Call Call=client.newCall(请求);
call.enqueue(新回调(){
@凌驾
公共void onFailure(调用调用,IOE异常){
if(方法==POST){
runOnUiThread(新的Runnable(){
@凌驾
公开募捐{
//Toast.makeText(getApplicationContext(),“Gangguan koneksi,periksa koneksi internet anda!”,Toast.LENGTH\u LONG.show();
我们是否应该移动此-->errorAlert();login();reLoginAlert();loginArea.setVisibility(View.INVISIBLE);openTitle();
您可以创建一个BaseActivity,然后所有活动都对其进行扩展
将方法移动到BaseActivity
您可以在扩展BaseActivity的任何活动中调用它
以下是你的基本活动
public class BaseActivity extends Activity{
//here is your method body
public String methodA(Runnable run){
//handle your result in run
runOnUiThread(run);
return "hello-world";
}
}
下面是你的活动
public class ActivityA extends BaseActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
//invoke methodA
String myData = methodA(new Runnable(){
@Override
public void run() {
//handle json data
}
});
}
}
我们怎么做?我重新编辑我的帖子,请检查,有任何问题请告诉我。如果你在每个okhttp响应结果中看到我调用runOnUI线程的方法。我们如何将其解析为基本活动?我不明白你想做什么,你能描述更多细节吗?好的。我已经移动了方法getJsonData()
到BaseActivity
我是否必须将getJsonData()中调用的其他方法也移动到BaseActivity
中..如果是..像ProgressBar这样的组件如何解决..我将在我的问题中加上标记。。