首先,我是Android和java的新手,因为我来自网络开发者背景。
最近,我尝试开发和应用程序用于学习目的,但我在开发过程中遇到了一个令人头痛的问题。
我有一个主要活动触发Asynctask通过php文件从我的wamp数据库中获取id列表。
我的主要活动文件的一部分 - login_main.java
public class login_main extends AppCompatActivity implements OnDataSendToActivity{
ViewPager viewPager;
CustomAdapter adapter;
ArrayList<String> images = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
//setSupportActionBar(toolbar);
SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", 0); // 0 - for private mode
SharedPreferences.Editor editor = pref.edit();
String username = pref.getString("username", null);
String type = "getProfileImages";
RetrieveData retrieveData = new RetrieveData(this);
retrieveData.execute(type,username);
viewPager = (ViewPager) findViewById(R.id.view_pager);
}
public void sendData(String response) {
try {
JSONObject jsonObject = new JSONObject(response);
JSONArray result = jsonObject.getJSONArray("result");
for (int i = 0 ; i < result.length(); i++) {
JSONObject obj = result.getJSONObject(i);
String id = obj.getString("image"+i);
String url = "http://192.168.12.252/"+id+"/profile.png";
images.add(url);
}
} catch (JSONException e) {
e.printStackTrace();
}
adapter = new CustomAdapter(login_main.this,images);//set ur image array here
viewPager.setAdapter(adapter);
}
AsyncTask文件
public class RetrieveData extends AsyncTask<String,Void,String>{
Context context;
RetrieveData(Context ctx) {
context = ctx;
}
private OnDataSendToActivity dataSendToActivity;
public RetrieveData(Activity activity){
dataSendToActivity = (OnDataSendToActivity)activity;
}
@Override
protected String doInBackground(String... params) {
String profile_url = "http://192.168.12.252/getprofile.php";
String image_url = "http://192.168.12.252/imagelist.php";
String type = params[0];
if(type.equals("getProfile")){
try {
String user_name = params[1];
URL url = new URL(profile_url);
HttpURLConnection httpURLConnection = null;
httpURLConnection = (HttpURLConnection)url.openConnection();
httpURLConnection.setRequestMethod("POST");
httpURLConnection.setDoOutput(true);
httpURLConnection.setDoInput(true);
httpURLConnection.setDoOutput(true);
httpURLConnection.setDoInput(true);
OutputStream outputStream = httpURLConnection.getOutputStream();
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8"));
String post_data = URLEncoder.encode("user_name", "UTF-8")+"="+URLEncoder.encode(user_name, "UTF-8");
bufferedWriter.write(post_data);
bufferedWriter.flush();
bufferedWriter.close();
outputStream.close();
InputStream inputStream = httpURLConnection.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream,"iso-8859-1"));
String result = null;
result = bufferedReader.readLine();
bufferedReader.close();
inputStream.close();
httpURLConnection.disconnect();
return result;
} catch (IOException e) {
e.printStackTrace();
}
}else if(type.equals("getProfileImages")){
try {
String user_name = params[1];
URL url = new URL(image_url);
HttpURLConnection httpURLConnection = null;
httpURLConnection = (HttpURLConnection)url.openConnection();
httpURLConnection.setRequestMethod("POST");
httpURLConnection.setDoOutput(true);
httpURLConnection.setDoInput(true);
httpURLConnection.setDoOutput(true);
httpURLConnection.setDoInput(true);
OutputStream outputStream = httpURLConnection.getOutputStream();
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8"));
String post_data = URLEncoder.encode("Image", "UTF-8")+"="+URLEncoder.encode("Image", "UTF-8")+"&"+URLEncoder.encode("user_name", "UTF-8")+"="+URLEncoder.encode(user_name, "UTF-8");
bufferedWriter.write(post_data);
bufferedWriter.flush();
bufferedWriter.close();
outputStream.close();
InputStream inputStream = httpURLConnection.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream,"iso-8859-1"));
String result = null;
result = bufferedReader.readLine();
bufferedReader.close();
inputStream.close();
httpURLConnection.disconnect();
return result;
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
dataSendToActivity.sendData(result);
}
页面适配器文件
public class CustomAdapter extends PagerAdapter{
Activity activity;
ArrayList<String> images = new ArrayList<>();
LayoutInflater inflater;
public CustomAdapter(Activity activity, ArrayList<String> images){
this.activity = activity;
this.images = images;
}
@Override
public int getCount() {
return images.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view==object;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
inflater = (LayoutInflater)activity.getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View itemView = inflater.inflate(R.layout.swipe,container,false);
ImageView image;
image = (ImageView)itemView.findViewById(R.id.imageView);
DisplayMetrics dis = new DisplayMetrics();
activity.getWindowManager().getDefaultDisplay().getMetrics(dis);
int height = dis.heightPixels;
int width = dis.widthPixels;
image.setMinimumHeight(height);
image.setMinimumWidth(width);
try{
Picasso.with(activity.getApplicationContext())
.load(images.get(position))
.placeholder(R.mipmap.ic_launcher)
.error(R.mipmap.ic_launcher)
.into(image);
}catch (Exception ex){
}
container.addView(itemView);
return itemView;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
((ViewPager) container).removeView((View)object);
}
}
所以让我在这里解释一下,这里有什么。我的应用程序所做的是它将从我的phpmysql中获取一组id,从asynctask获取后,它使用Interface发送数据回主活动,这是sendData函数中的sendData函数你可以看到有一个循环到循环遍历每个id并生成url图像链接并将其存储到字符串数组中,变量名称是图像,页面适配器将使用Picasso插件将图像放入页面适配器中的imageView。
try {
JSONObject jsonObject = new JSONObject(response);
JSONArray result = jsonObject.getJSONArray("result");
for (int i = 0 ; i < result.length(); i++) {
JSONObject obj = result.getJSONObject(i);
String id = obj.getString("image"+i);
String url = "http://192.168.12.252/"+id+"/profile.png";
images.add(url);
}
} catch (JSONException e) {
e.printStackTrace();
}
adapter = new CustomAdapter(login_main.this,images);//set ur image array here
viewPager.setAdapter(adapter);
问题是我想让这些图像可点击,当它点击时,它会显示该特定id的信息,如何将id与这些图像映射并使它们可点击,当它点击时,它会做另一个asynctask到检索该ID的更多详细信息
答案 0 :(得分:0)
您可以更改Adapter类以获取ID的ArrayList:
public class CustomAdapter extends PagerAdapter{
ArrayList<String> mIds = new ArrayList<>();
public CustomAdapter(Activity activity, ArrayList<String> images, ArrayList<String> ids){
mIds = ids;
}
然后,在instantiateItem()
:
image.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view){
String clickedId = mIds.get(position);
// Do something with the selected image Id
}
});
不要忘记将您的通话更改为new CustomAdapter(activity, images, ids)
。
答案 1 :(得分:0)
我建议你创建自己的Object(Class),它有item(id,filename,...)。将ArrayList<YourObjectName>
传递给CustomAdapter
。