Android 如何确定I方法是由片段调用的?
我有一个main活动,它又有几个片段 在片段生成器中,我得到一个活动 我有一个负责所有http请求的GETJson方法。这需要将JSONObject返回给调用方。 该方法使用AsynkTask,因此我创建了一个接口,并实现了从OnPostExecute获取返回的片段 但是,由于所有片段共享同一个活动(MainActivity),因此始终返回该活动Android 如何确定I方法是由片段调用的?,android,Android,我有一个main活动,它又有几个片段 在片段生成器中,我得到一个活动 我有一个负责所有http请求的GETJson方法。这需要将JSONObject返回给调用方。 该方法使用AsynkTask,因此我创建了一个接口,并实现了从OnPostExecute获取返回的片段 但是,由于所有片段共享同一个活动(MainActivity),因此始终返回该活动 package JSON; import android.app.Activity; import android.app.ProgressDial
package JSON;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;
import android.util.Log;
import android.view.View;
import android.widget.Toast;
import com.example.piadas.MainActivity;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import utils.OnJsonFinished;
public class GetJson extends AsyncTask<String, Void, String> {
public interface OnJsonFinished{
public void onJsonFinishedMethod(Activity act, Context ctx, String response);
}
ProgressDialog dialog;
Context ctx;
Activity act;
String msg;
private utils.OnJsonFinished listener;
public GetJson(Context ctx, Activity act) {
this.ctx = ctx;
this.act = act;
if(act instanceof utils.OnJsonFinished){
this.listener = (utils.OnJsonFinished)act;
}
else{
throw new ClassCastException(act.toString()
+ " must implement OnJsonFinished");
}
}
protected void onPreExecute() {
super.onPreExecute();
dialog = ProgressDialog.show(ctx, "Aguarde", "Consultando...");
}
@Override
protected String doInBackground(String... strings) {
String command = strings[0];
try {
URL url = new URL(command);
URLConnection con = url.openConnection();
con.setRequestProperty("Authorization", "Basic c3VwZXI6MTIzNA==");
con.setConnectTimeout(60000);
//con.setReadTimeout(readTimeout);
InputStream is = con.getInputStream();
/*HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet(command);
HttpParams httpParams = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParams, 8000);
client = new DefaultHttpClient(httpParams);
request.addHeader("Authorization", "Basic c3VwZXI6MTIzNA==");
HttpResponse response = client.execute(request);
InputStream is = response.getEntity().getContent();*/
BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
msg = "Efetuado com sucesso!";
//PrincipalActivity.PDV.setConectado(true);
return sb.toString();
} catch (Exception ex) {
Log.e("Erro", "Descrição:", ex);
msg = ex.toString();
return "";
}
}
protected void onPostExecute(String json) {
dialog.dismiss();
if (json.equals("")) {
Toast.makeText(ctx, msg, Toast.LENGTH_SHORT).show();
}
else{
listener.onJsonFinishedMethod(act, ctx, json);
}
}
}
package utils;
import android.app.Activity;
import android.content.Context;
public interface OnJsonFinished {
public void onJsonFinishedMethod(Activity act, Context ctx, String response);
}
package com.example.piadas;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.RadioGroup;
import android.widget.Toast;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import org.json.JSONArray;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.List;
import JSON.GetJson;
import JSON.apiPiadas;
import adapter.adapterListPiadas;
import piadas.entidade.Categoria;
import piadas.entidade.FaixaEtaria;
import piadas.entidade.Piada;
import utils.OnJsonFinished;
public class BancoPiadaFragment extends Fragment implements OnJsonFinished {
RadioGroup rgCategoria;
RadioGroup rgFaixa;
private View view;
Button btnBuscar;
EditText editPalavra;
List<Piada> listaPiadas;
ListView lvPiadas;
Context ctx;
Activity act;
adapterListPiadas adapterPiadas;
public BancoPiadaFragment(Activity act, Context ctx) {
this.ctx = ctx;
this.act = act;
}
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_bancopiada, container, false);
return view;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
initView();
init();
}
private void initView(){
btnBuscar = view.findViewById(R.id.btnBuscar);
rgCategoria = view.findViewById(R.id.gpCateg);
rgFaixa = view.findViewById(R.id.gpFaixas);
editPalavra = view.findViewById(R.id.editPalavra);
lvPiadas = view.findViewById(R.id.lvPiadas);
}
private void init(){
btnBusca_click();
//listaPiadas = new ArrayList<>();
lvPiadas.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
FragmentManager fm = getActivity().getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.fragment_content, new PiadaFragment(listaPiadas.get(position))).addToBackStack(null);
ft.commit();
}
});
}
private void btnBusca_click(){
btnBuscar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
listaPiadas = new ArrayList<>();
aplicaFiltroPiadas();
}
});
}
private void aplicaFiltroPiadas(){
//int i = rgCategoria.getCheckedRadioButtonId();
int categoria = -1;
int faixaEtaria = -1;
String palavra = "";
switch (rgCategoria.getCheckedRadioButtonId()) {
case R.id.rbTCategoria:
categoria = -1;
break;
case R.id.rbJoaozinho:
categoria = 2;
break;
case R.id.rbJapones:
categoria = 3;
break;
case R.id.rbLoira:
categoria = 0;
break;
case R.id.rbPortugues:
categoria = 1;
break;
}
switch (rgFaixa.getCheckedRadioButtonId()) {
case R.id.rbTFaixas:
faixaEtaria = -1;
break;
case R.id.rbFLivre:
faixaEtaria = 0;
break;
case R.id.rbF14:
faixaEtaria = 1;
break;
case R.id.rbF18:
faixaEtaria = 2;
break;
}
palavra = editPalavra.getText().toString().trim();
findPiadas(categoria, faixaEtaria, palavra);
//Toast.makeText(this, "Teste:", Toast.LENGTH_SHORT).show();
}
private void findPiadas(int categoria, int faixa, String palavra){
new GetJson(ctx, act).execute(apiPiadas.findPiada(categoria, faixa, palavra));
}
private void preparaTela(Activity act){
adapterPiadas = new adapterListPiadas(listaPiadas, act);
lvPiadas.setAdapter(adapterPiadas);
}
@Override
public void onJsonFinishedMethod(Activity act, Context ctx, String response) {
if (!response.equals("")) {
try{
JSONArray arrayPiadas = new JSONArray(response);
JSONObject objPiada;
for(int i=0; i < arrayPiadas.length(); i++){
objPiada = arrayPiadas.getJSONObject(i);
JSONObject objCategoria = objPiada.getJSONObject("categoria");
JSONObject objFaixaEtaria = objPiada.getJSONObject("faixaEtaria");
Categoria cat = new Categoria(objCategoria.getInt("id"), objCategoria.getString("nome"));
FaixaEtaria faixaEtaria = new FaixaEtaria(objFaixaEtaria.getInt("id"), objFaixaEtaria.getString("descricao"));
listaPiadas.add(new Piada(objPiada.getInt("id"), objPiada.getString("titulo"), cat, faixaEtaria, objPiada.getString("conteudo"), objPiada.getString("imagem")));
}
preparaTela(act);
}catch(Exception ex){
Toast.makeText(ctx, ex.toString(), Toast.LENGTH_SHORT).show();
}
}
}
}
包JSON;
导入android.app.Activity;
导入android.app.ProgressDialog;
导入android.content.Context;
导入android.os.AsyncTask;
导入android.util.Log;
导入android.view.view;
导入android.widget.Toast;
导入com.example.piadas.main活动;
导入java.io.BufferedReader;
导入java.io.InputStream;
导入java.io.InputStreamReader;
导入java.net.URL;
导入java.net.URLConnection;
导入utils.OnJsonFinished;
公共类GetJson扩展异步任务{
公共接口OnJsonFinished{
public void onJsonFinishedMethod(活动行为、上下文ctx、字符串响应);
}
进程对话;
上下文ctx;
活动法;
串味精;
私有utils.OnJsonFinished侦听器;
公共GetJson(上下文ctx,活动法案){
this.ctx=ctx;
this.act=act;
if(act instanceof utils.OnJsonFinished){
this.listener=(utils.OnJsonFinished)act;
}
否则{
抛出新的ClassCastException(act.toString()
+“必须实现OnJsonFinished”);
}
}
受保护的void onPreExecute(){
super.onPreExecute();
dialog=ProgressDialog.show(ctx,“Aguarde”,“Consultando…”);
}
@凌驾
受保护的字符串背景(字符串…字符串){
字符串命令=字符串[0];
试一试{
URL=新URL(命令);
URLConnection con=url.openConnection();
con.setRequestProperty(“授权”,“基本c3VwZXI6MTIzNA=”);
con.设置连接超时(60000);
//con.setReadTimeout(读取超时);
InputStream=con.getInputStream();
/*HttpClient=new DefaultHttpClient();
HttpGet请求=新的HttpGet(命令);
HttpParams HttpParams=新的BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParams,8000);
客户机=新的默认HttpClient(httpParams);
addHeader(“授权”,“基本c3VwZXI6MTIzNA=”);
HttpResponse response=client.execute(请求);
InputStream is=response.getEntity().getContent()*/
BufferedReader reader=新的BufferedReader(新的InputStreamReader(is,“UTF-8”),8;
StringBuilder sb=新的StringBuilder();
字符串行=null;
而((line=reader.readLine())!=null){
sb.追加(第+行“\n”);
}
msg=“Efetuado com successo!”;
//PrincipalActivity.PDV.setConectado(真);
使某人返回字符串();
}捕获(例外情况除外){
Log.e(“Erro”,“descripção:”,ex);
msg=ex.toString();
返回“”;
}
}
受保护的void onPostExecute(字符串json){
dialog.dismise();
if(json.equals(“”){
Toast.makeText(ctx、msg、Toast.LENGTH_SHORT).show();
}
否则{
onJsonFinishedMethod(act、ctx、json);
}
}
}
包UTIL;
导入android.app.Activity;
导入android.content.Context;
公共接口OnJsonFinished{
public void onJsonFinishedMethod(活动行为、上下文ctx、字符串响应);
}
package com.example.piadas;
导入android.app.Activity;
导入android.content.Context;
导入android.os.Bundle;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.AdapterView;
导入android.widget.Button;
导入android.widget.EditText;
导入android.widget.ListView;
导入android.widget.RadioGroup;
导入android.widget.Toast;
导入androidx.annotation.Nullable;
导入androidx.fragment.app.fragment;
导入androidx.fragment.app.FragmentManager;
导入androidx.fragment.app.FragmentTransaction;
导入org.json.JSONArray;
导入org.json.JSONObject;
导入java.util.ArrayList;
导入java.util.List;
导入JSON.GetJson;
导入JSON.apiPiadas;
导入adapter.adapterListPiadas;
导入piadas.entidade.Categoria;
进口piadas.entidade.FaixaEtaria;
导入piadas.entidade.Piada;
导入utils.OnJsonFinished;
公共类BanCopiadFragment扩展了JsonFinished上的片段实现{
放射组RGA;
放射组rgFaixa;
私人视野;
按钮btnBuscar;
EditText editPalavra;
列出清单;
列表视图lvPiadas;
上下文ctx;
活动法;
adapterListPiadas adapterPiadas;
公共银行(活动法,上下文ctx){
this.ctx=ctx;
this.act=act;
}
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图=充气机。充气(R.layout.fragment_bancopiada,容器,假);
返回视图;
}
@凌驾
ActivityCreated上的公共无效(@Nullable Bundle savedinStateCState){
super.onActivityCreated(savedInstanceState);
initView();
init();
}
私有void initView(){
btnBuscar=view.findViewById(R.id.btnBuscar);
rgCategoria=view.findviewbyd(R.id.gpCateg);
rgFaixa=view.findviewbyd(R.id.gpFaixas);
editPalavra=view.findViewById(R.id.editPalavra);
lvPiadas=view.findviewbyd(R.id.lvPiadas);
}
私有void init(){
b b USCA_单击();
//listaPiadas=newarraylist();
lvPiadas.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
公共链接(AdapterView)
public GetJson(Activity act, OnJsonFinished listener) {
}
private void findPiadas(int categoria, int faixa, String palavra){
new GetJson(act, this).execute(apiPiadas.findPiada(categoria, faixa, palavra));
}